In the course of developing modern software applications, developers are often confronted with the problem of interacting with external entities that don't look, feel or behave like familiar internal programming language objects. These external entities include databases, legacy systems, web services, non-native software components, as well as physical objects (e.g. to control their settings).
Generally, the programmer must learn new paradigms, skills and techniques for interacting with each of these entities. In addition, the programmer must develop or acquire a potentially large body of software to deal with the intricacies of each type of external entity. For example, writing software that interacts with an external web service may require the developer to master several new technologies, including the extensible Markup Language (XML), the XML Schema Language, the XML Protocol (XP a.k.a SOAP) and the Web Service Description Language (WSDL).
Each type of external entity with which the application interacts requires a different set of skills, knowledge and software from the developer. E.g., interacting with a database requires a completely difference set of skills, knowledge and software than interacting with an external web services. The additional burden associated with learning and implementing technologies for interacting with a variety of external entities increases the time, knowledge, skills and ultimately money required to develop a software application.
What is needed is a simple software abstraction that provides uniform access to external entities, reuses the developer's existing knowledge of general software concepts, and minimizes the specialized knowledge required for interacting with each type of external entity. Not only should these software abstractions be easy to use, but they should also be easy to customize for a particular purpose, with little or no software development. The software abstraction should make it easy to interact with several instances of an external entity simultaneously (e.g., use several instances of a web service to perform credit checks for several customers simultaneously). It should also simplify the handling of asynchronous events (e.g., a database trigger) generated by one or more instances of an external entity.
Consider for example the computing environment of FIG. 1. Example computing environment 100, as illustrated, includes servers 102, 115, 120 and 125, and client 112 communicatively coupled, through networking fabric 101.
Server 125 offers as an example ecommerce application 130, with which users of various client devices, such as client 112, may shop and purchase various items. Ecommerce application 130 may include a number of web pages 131 having contents, such as merchandise descriptions, reviews and pricing information, and one or more functions 132.
Complementarily, server 102 offers, as an example, shopping cart service 104 used by ecommerce applications, such as ecommerce application 130 (e.g., when users of client devices interact with their web pages/functions 131/132). As a result, developers of ecommerce applications need not develop their own “shopping cart” functions, and may concentrate their effort on the contents of web pages 131 instead.
Shopping cart service 104 may include e.g. an “add an item to cart” function, a “remove an item from cart” function, and a “checkout” function. In response to a user's selection of e.g. a graphical button displayed on a web page 131, one of functions 132 may cause one or more requests for the appropriate shopping cart functions to be generated and sent to shopping cart service 104 for processing on server 102.
Processing of these requests may in turn require the shopping cart functions to interact for example with services 118 and 128 of servers 115 and 120. Examples of services 118 and 128 are credit authorization, inventory or production slots confirmation, shipment/delivery scheduling, and so forth.
Thus, even in this limited example, developers of ecommerce applications 130 have to equip applications 130 to interact with an external “shopping cart” service 104, while developers of “shopping cart” service 104 have to equip service 104 to interact with external entities such as credit authorization, inventory/production slot confirmation, shipment/delivery scheduling, and so forth.
In addition to the general purpose web service software (e.g., XML, SOAP, WSDL) normally required to facilitate these interactions, each type of web service (e.g., shopping card, credit authorization, shipping) requires specialized software be written to interact with its specific features. For example, software must be written to create the “add item to cart” XML message and send it to the URL address associated with the correct shopping basket. In addition, software must be written to map messages returned by the credit check and shipping services into a form that may be presented to the end user.
As those skilled in the art would appreciate, typically, the example would require simultaneous and asynchronous interaction with several instances of each external service. E.g., at any instance in time, an ecommerce application 130 may be hosting many users, each having a separate shopping cart, containing different items. Shopping cart service 104 in turn may be processing shopping cart interactions for a multitude of carts of different users of different ecommerce applications. In like manner, a credit authorization service may be processing authorization requests for a multitude of checkouts occurring for a number of ecommerce applications at the same time. Notification of final credit approval and shipping arrangements for each of these transactions may occur asynchronously (e.g., via e-mail) after the customer has completed their order(s). Clearly, it is critical that the shopping carts, credit authorizations, shipping details and notifications associated with each customer are correlated and kept separate from that of other customers, even when several customer requests are processed simultaneously. The software required to handle the required correlation and asynchronous event handling can become quite complex.
Even in this relatively simple example, it is clear application developers must generally acquire new and specialized skills, knowledge and software to interact with external entities. They must often create specialized software for interacting with specific forms of each external entity. They must also deal with the complexities of interacting simultaneously and asynchronously with several instances of a given type of entity. Accordingly, a simple software abstraction that provides uniform access to external entities, simplifies creating specialized software abstractions for specific types of external entities, and facilitates interacting simultaneously and asynchronously with multiple instances of an external entity is desired.